import configPromise from '@payload-config';
import { notFound } from 'next/navigation';
import type { Metadata } from 'next/types';
import { getPayload } from 'payload';
import React from 'react';

import { PostsList } from '@/components/PostsList';

import PageClient from './page.client';

export const revalidate = 600;

type Args = {
  params: Promise<{
    pageNumber: string;
  }>;
};

export default async function Page({ params: paramsPromise }: Args) {
  const { pageNumber } = await paramsPromise;

  const sanitizedPageNumber = Number(pageNumber);

  if (!Number.isInteger(sanitizedPageNumber)) notFound();

  return (
    <div className='pb-12'>
      <PageClient />

      <PostsList postType='blog' page={sanitizedPageNumber} />
    </div>
  );
}

export async function generateMetadata({ params: paramsPromise }: Args): Promise<Metadata> {
  const { pageNumber } = await paramsPromise;
  return {
    title: `Suno Blog - Page ${pageNumber || ''}`,
  };
}

export async function generateStaticParams() {
  const payload = await getPayload({ config: configPromise });
  const { totalDocs } = await payload.count({
    collection: 'posts',
    where: {
      postType: {
        equals: 'blog',
      },
    },
    overrideAccess: false,
  });

  const totalPages = Math.ceil(totalDocs / 15);

  const pages: { pageNumber: string }[] = [];

  for (let i = 1; i <= totalPages; i++) {
    pages.push({ pageNumber: String(i) });
  }

  return pages;
}
